package com.navinfo.platform.basicdatastatistics.utils.day;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.navinfo.location.mileage.util.JsonUtil;
import com.navinfo.platform.basicdatastatistics.dto.AltitudeDto;
import com.navinfo.platform.basicdatastatistics.dto.BasicDataDto;
import com.navinfo.platform.basicdatastatistics.dto.VehicleHourInfoDto;
import com.navinfo.platform.basicdatastatistics.dto.VehicleHourInfoDto.VehicleHourBean;
import com.navinfo.platform.basicdatastatistics.dto.WLoadInfoDto;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema;
import org.apache.spark.sql.execution.columnar.StructColumnBuilder;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.Metadata;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@SuppressWarnings({"ResultOfMethodCallIgnored", "MismatchedQueryAndUpdateOfCollection"})
public class VehicleBasicDataSchema {

    public static StructType createSchema() {
        List<StructField> list = new ArrayList<>();
        list.add(new StructField("uid", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("tid", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("sharp_step_on_gas_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_power", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_useful_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_useful_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("in_gear_coast_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("in_gear_coast_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("in_gear_coast_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("brake_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("brake_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("brake_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_estimated_load", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_integral_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_integral_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("parking_power_on_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("city_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("city_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("city_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rural_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rural_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rural_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("eco_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("eco_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("eco_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("up_slope_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("up_slope_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("up_slope_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("down_slope_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("down_slope_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("down_slope_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("level_road_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("level_road_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("level_road_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_cold_start_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_cold_start_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_cold_start_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cruise_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cruise_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cruise_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("shift_gears_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_step_on_gas_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_step_on_gas_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_step_on_gas_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_park_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_start_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_cold_start_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("charge_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("leak_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_start_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_start_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_stability_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_stability_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cross_cities", DataTypes.StringType, true, Metadata.empty()));
        list.add(new StructField("avg_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("exceed_speed_range_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("exceed_speed_range_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("exceed_speed_range_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("assist_brake_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("assist_brake_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fatigue_driving_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("park_throttle_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("park_throttle_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("engine_work_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("driving_handbrake_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("driving_handbrake_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("driving_handbrake_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_handbrake_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_handbrake_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_turning_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range01_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range01_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range01_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range02_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range02_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range02_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range03_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range03_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range03_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range04_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range04_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range04_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range05_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range05_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range05_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range06_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range06_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range06_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range07_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range07_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range07_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range08_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range08_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range08_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range09_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range09_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range09_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range10_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range10_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range10_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range11_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range11_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range11_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range12_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range12_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range12_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear01_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear01_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear01_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear01_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear02_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear02_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear02_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear02_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear03_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear03_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear03_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear03_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear04_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear04_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear04_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear04_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear05_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear05_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear05_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear05_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear06_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear06_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear06_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear06_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear07_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear07_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear07_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear07_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear08_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear08_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear08_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear08_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear09_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear09_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear09_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear09_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear10_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear10_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear10_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear10_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear11_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear11_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear11_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear11_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear12_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear12_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear12_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear12_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear13_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear13_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear13_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear13_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear14_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear14_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear14_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear14_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear15_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear15_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear15_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear15_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear16_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear16_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear16_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear16_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear_other_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear_other_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear_other_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear_other_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range500_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range500_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range500_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range600_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range600_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range600_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range700_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range700_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range700_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range800_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range800_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range800_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range900_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range900_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range900_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1000_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1000_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1000_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1100_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1100_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1200_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1200_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1200_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1300_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1300_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1300_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1400_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1400_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1400_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1500_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1500_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1500_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1600_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1600_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1600_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1700_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1700_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1700_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1800_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1800_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1800_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1900_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1900_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1900_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2000_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2000_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2000_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2100_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2100_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2200_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2200_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2200_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2300_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2300_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2300_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2400_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2400_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2400_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2500_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2500_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2500_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2600_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2600_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2600_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2700_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2700_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2700_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2800_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2800_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2800_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2900_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2900_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2900_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range3000_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range3000_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range3000_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range_over3000_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range_over3000_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range_over3000_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("no_idle_rpm_sum", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("no_idle_rpm_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_sum", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_rpm", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_rpm", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_rpm", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_no_idle_rpm", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp85_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp95_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp105_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp110_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp115_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp125_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp130_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp135_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp140_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp145_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp_over150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp85_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp95_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp105_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp110_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp115_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp125_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp130_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp135_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp140_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp145_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp_over150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_work_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_work_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp_sum", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_work_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_idle_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_idle_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp_sum", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_idle_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent0_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent10_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent20_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent30_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent40_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent60_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent99_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent_sum", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_gas_open_percent", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque0_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque10_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque20_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque30_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque40_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque60_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque99_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_torque", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_torque", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque_sum", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_torque", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat85_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat95_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat105_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat110_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat115_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat125_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat130_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat135_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat140_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat145_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat_over150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat_sum", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_iat", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_iat", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_iat", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip60_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip110_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip130_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip140_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip_over150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip_sum", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_ip", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_ip", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_ip", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so90_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so90_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so_90_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so_90_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so_90_mileage_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so120_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so120_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so_120_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so_120_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so_120_mileage_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_mileage_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_mileage_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("hsb_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("hsb_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("hsb_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("hsb_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("hsb_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("hsb_mileage_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("csb_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("csb_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("csb_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("csb_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("csb_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("csb_mileage_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("clutch_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("clutch_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("clutch_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("clutch_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("clutch_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("clutch_mileage_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ng_coast_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ng_coast_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ng_coast_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ng_coast_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ng_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ng_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ng_mileage_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fout_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fout_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fout_100km_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fout_duration_proportion", DataTypes.IntegerType, true, Metadata.empty()));

        List<StructField> aslStructFields = new ArrayList<>();
        for (int i = 0; i <= 13; i++) {
            StructField aslTime = DataTypes.createStructField("time", DataTypes.IntegerType, true, Metadata.empty());
            StructField aslMileage = DataTypes.createStructField("mileage", DataTypes.IntegerType, true, Metadata.empty());
            StructField aslFuel = DataTypes.createStructField("fuel", DataTypes.IntegerType, true, Metadata.empty());
            StructType aslInfo = DataTypes.createStructType(new StructField[]{aslTime, aslMileage, aslFuel});
            StructField aslField = DataTypes.createStructField("asl" + i, aslInfo, true, Metadata.empty());
            aslStructFields.add(aslField);
        }

        StructType altitudeInfo = DataTypes.createStructType(aslStructFields);

        StructField altitudeInfoField = DataTypes.createStructField("altitude_info", altitudeInfo, true, Metadata.empty());
        list.add(altitudeInfoField);

        List<StructField> hourStructFields = new ArrayList<>();
        for (int i = 0; i < 24; i++) {
            StructField hourState = DataTypes.createStructField("state", DataTypes.IntegerType, true, Metadata.empty());
            StructField hourTime = DataTypes.createStructField("time", DataTypes.IntegerType, true, Metadata.empty());
            StructField hourMileage = DataTypes.createStructField("mileage", DataTypes.IntegerType, true, Metadata.empty());
            StructField hourFuel = DataTypes.createStructField("fuel", DataTypes.IntegerType, true, Metadata.empty());
            StructType hour = DataTypes.createStructType(new StructField[]{hourState, hourTime, hourMileage, hourFuel});
            StructField hourField = DataTypes.createStructField("hour" + i + "", hour, true, Metadata.empty());
            hourStructFields.add(hourField);
        }

        StructType vehicleHourInfo = DataTypes.createStructType(hourStructFields);

        StructField vehicleHourInfoField = DataTypes.createStructField("vehicle_hour_info", vehicleHourInfo, true, Metadata.empty());
        list.add(vehicleHourInfoField);
        list.add(new StructField("update_time", DataTypes.TimestampType, true, Metadata.empty()));
        //add row start
        list.add(new StructField("sharp_turning_mil", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so90_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so120_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fatigue_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));


        //新增按行程累加的吨/公里字段字段
        list.add(new StructField("ton_km_info", DataTypes.StringType, true, Metadata.empty()));

        //新增按行程累加的经过城市详细信息的字段
        list.add(new StructField("cross_cities_info", DataTypes.StringType, true, Metadata.empty()));

        //新增不同载重类型的里程和油耗信息的字段
        List<StructField> loadInfoFields = new ArrayList<>();
        for (String key : WLoadInfoDto.typeKeys) {
            StructField mileageField = DataTypes.createStructField("mileage", DataTypes.IntegerType, true, Metadata.empty());
            StructField fuelField = DataTypes.createStructField("fuel", DataTypes.IntegerType, true, Metadata.empty());
            StructType wloadInfoType = DataTypes.createStructType(new StructField[]{mileageField, fuelField});

            loadInfoFields.add(DataTypes.createStructField(key, wloadInfoType, true, Metadata.empty()));
        }
        list.add(DataTypes.createStructField("wload_type_info", DataTypes.createStructType(loadInfoFields), true, Metadata.empty()));
        //新增百公里油耗，平均车速(不含怠速)，经济区间占比，当日行程里程之和
        list.add(new StructField("fuel_100km", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_speed_noidle", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("eco_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_mileage_total", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("brake_times", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed1_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed1_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed1_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed1_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed1_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed1_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed1_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed1_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_turning1_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("long_idle_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("long_idle_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("long_idle_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cold_running_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cold_running_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cold_running_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cold_running_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("night_running_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("night_running_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("night_running_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("night_running_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("high_rotation_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("high_rotation_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("high_rotation_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("high_rotation_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("large_gas_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("large_gas_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("large_gas_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("large_gas_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("full_gas_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("full_gas_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("full_gas_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("full_gas_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fast_speed_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fast_speed_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fast_speed_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fast_speed_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast1_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast1_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast1_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast1_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("flameout_coast_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("flameout_coast_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("flameout_coast_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("flameout_coast_number", DataTypes.IntegerType, true, Metadata.empty()));

        list.add(new StructField("load_info", DataTypes.StringType, true, Metadata.empty()));
        list.add(new StructField("score_info", DataTypes.StringType, true, Metadata.empty()));
        //东风 新增怠速油耗、时长、次数字段（根据仪表速度=0时的怠速）
        list.add(new StructField("idle_fuel_instrument_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_duration_instrument_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_number_instrument_speed", DataTypes.IntegerType, true, Metadata.empty()));

        list.add(new StructField("gas_open_percent0_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent10_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent20_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent30_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent40_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent50_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent60_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent70_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent80_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent90_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent99_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent100_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent0_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent10_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent20_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent30_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent40_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent50_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent60_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent70_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent80_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent90_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent99_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent100_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque0_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque10_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque20_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque30_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque40_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque50_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque60_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque70_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque80_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque90_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque99_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque100_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque0_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque10_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque20_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque30_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque40_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque50_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque60_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque70_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque80_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque90_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque99_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque100_fuel",DataTypes.IntegerType,true,Metadata.empty()));

        list.add(new StructField("trip_urea",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("urea_100km",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("urea_fuel_ratio",DataTypes.IntegerType,true,Metadata.empty()));




        return new StructType(list.toArray(new StructField[list.size()]));
    }


    public static Integer getIntValue(Long value) {
        if (value == null) {
            return null;
        }
        return value.intValue();
    }

    public static Integer getIntValue(Integer value) {
        if (value == null) {
            return null;
        }
        return value;
    }

    public static Row createRow(BasicDataDto basicDataDto, StructType schema) {
        List<Object> list = new ArrayList<>();
        list.add(basicDataDto.getUid());
        list.add(basicDataDto.getTid());
        list.add(getIntValue(basicDataDto.getSharpStepOnGasNumber()));
//        list.add(basicDataDtos.getTimeRanges());
        list.add(getIntValue(basicDataDto.getTripPower()));
        list.add(getIntValue(basicDataDto.getTripMileage()));
        list.add(getIntValue(basicDataDto.getTripFuel()));
        list.add(getIntValue(basicDataDto.getTripDuration()));
        list.add(getIntValue(basicDataDto.getMaxUsefulSpeed()));
        list.add(getIntValue(basicDataDto.getMinUsefulSpeed()));
        list.add(getIntValue(basicDataDto.getInGearCoastMileage()));
        list.add(getIntValue(basicDataDto.getInGearCoastDuration()));
        list.add(getIntValue(basicDataDto.getInGearCoastNumber()));
        list.add(getIntValue(basicDataDto.getBrakeNumber()));
        list.add(getIntValue(basicDataDto.getBrakeMileage()));
        list.add(getIntValue(basicDataDto.getBrakeDuration()));
        list.add(getIntValue(basicDataDto.getVehicleEstimatedLoad()));
        list.add(getIntValue(basicDataDto.getRouteIntegralMileage()));
        list.add(getIntValue(basicDataDto.getRouteIntegralFuel()));
        list.add(getIntValue(basicDataDto.getMaxSpeed()));
        list.add(getIntValue(basicDataDto.getMinSpeed()));
        list.add(getIntValue(basicDataDto.getParkingPowerOnDuration()));
        list.add(getIntValue(basicDataDto.getCityDrivingMileage()));
        list.add(getIntValue(basicDataDto.getCityDrivingDuration()));
        list.add(getIntValue(basicDataDto.getCityDrivingFuel()));
        list.add(getIntValue(basicDataDto.getRuralDrivingMileage()));
        list.add(getIntValue(basicDataDto.getRuralDrivingDuration()));
        list.add(getIntValue(basicDataDto.getRuralDrivingFuel()));
        list.add(getIntValue(basicDataDto.getEcoDrivingMileage()));
        list.add(getIntValue(basicDataDto.getEcoDrivingDuration()));
        list.add(getIntValue(basicDataDto.getEcoDrivingFuel()));
        list.add(getIntValue(basicDataDto.getUpSlopeDrivingMileage()));
        list.add(getIntValue(basicDataDto.getUpSlopeDrivingDuration()));
        list.add(getIntValue(basicDataDto.getUpSlopeDrivingFuel()));
        list.add(getIntValue(basicDataDto.getDownSlopeDrivingMileage()));
        list.add(getIntValue(basicDataDto.getDownSlopeDrivingDuration()));
        list.add(getIntValue(basicDataDto.getDownSlopeDrivingFuel()));
        list.add(getIntValue(basicDataDto.getLevelRoadDrivingMileage()));
        list.add(getIntValue(basicDataDto.getLevelRoadDrivingDuration()));
        list.add(getIntValue(basicDataDto.getLevelRoadDrivingFuel()));
        list.add(getIntValue(basicDataDto.getVehicleColdStartMileage()));
        list.add(getIntValue(basicDataDto.getVehicleColdStartDuration()));
        list.add(getIntValue(basicDataDto.getVehicleColdStartFuel()));
        list.add(getIntValue(basicDataDto.getCruiseMileage()));
        list.add(getIntValue(basicDataDto.getCruiseDuration()));
        list.add(getIntValue(basicDataDto.getCruiseFuel()));
        list.add(getIntValue(basicDataDto.getShiftGearsNumber()));
        list.add(getIntValue(basicDataDto.getSharpDownSpeedDuration()));
        list.add(getIntValue(basicDataDto.getSharpDownSpeedMileage()));
        list.add(getIntValue(basicDataDto.getSharpDownSpeedNumber()));
        list.add(getIntValue(basicDataDto.getSharpUpSpeedDuration()));
        list.add(getIntValue(basicDataDto.getSharpUpSpeedMileage()));
        list.add(getIntValue(basicDataDto.getSharpUpSpeedNumber()));
        list.add(getIntValue(basicDataDto.getSharpUpSpeedFuel()));
        list.add(getIntValue(basicDataDto.getSharpStepOnGasMileage()));
        list.add(getIntValue(basicDataDto.getSharpStepOnGasDuration()));
        list.add(getIntValue(basicDataDto.getSharpStepOnGasFuel()));
        list.add(getIntValue(basicDataDto.getVehicleParkNumber()));
        list.add(getIntValue(basicDataDto.getVehicleStartNumber()));
        list.add(getIntValue(basicDataDto.getVehicleColdStartNumber()));
        list.add(getIntValue(basicDataDto.getChargeFuel()));
        list.add(getIntValue(basicDataDto.getLeakFuel()));
        list.add(getIntValue(basicDataDto.getVehicleStartDuration()));
        list.add(getIntValue(basicDataDto.getVehicleStartFuel()));
        list.add(getIntValue(basicDataDto.getGasStabilityNumber()));
        list.add(getIntValue(basicDataDto.getGasStabilityDuration()));
        list.add(basicDataDto.getCrossCities());
        list.add(getIntValue(basicDataDto.getAvgSpeed()));
        list.add(getIntValue(basicDataDto.getExceedSpeedRangeMileage()));
        list.add(getIntValue(basicDataDto.getExceedSpeedRangeDuration()));
        list.add(getIntValue(basicDataDto.getExceedSpeedRangeFuel()));
        list.add(getIntValue(basicDataDto.getAssistBrakeMileage()));
        list.add(getIntValue(basicDataDto.getAssistBrakeDuration()));
        list.add(getIntValue(basicDataDto.getFatigueDrivingNumber()));
        list.add(getIntValue(basicDataDto.getParkThrottleDuration()));
        list.add(getIntValue(basicDataDto.getParkThrottleFuel()));
        list.add(getIntValue(basicDataDto.getEngineWorkDuration()));
        list.add(getIntValue(basicDataDto.getDrivingHandbrakeNumber()));
        list.add(getIntValue(basicDataDto.getDrivingHandbrakeDuration()));
        list.add(getIntValue(basicDataDto.getDrivingHandbrakeMileage()));
        list.add(getIntValue(basicDataDto.getIdleHandbrakeNumber()));
        list.add(getIntValue(basicDataDto.getIdleHandbrakeDuration()));
        list.add(getIntValue(basicDataDto.getSharpTurningNumber()));
        list.add(getIntValue(basicDataDto.getSpeedRange01Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange01Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange01Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange02Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange02Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange02Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange03Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange03Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange03Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange04Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange04Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange04Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange05Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange05Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange05Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange06Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange06Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange06Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange07Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange07Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange07Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange08Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange08Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange08Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange09Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange09Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange09Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange10Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange10Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange10Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange11Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange11Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange11Fuel()));
        list.add(getIntValue(basicDataDto.getSpeedRange12Mileage()));
        list.add(getIntValue(basicDataDto.getSpeedRange12Duration()));
        list.add(getIntValue(basicDataDto.getSpeedRange12Fuel()));
        list.add(getIntValue(basicDataDto.getGear01Mileage()));
        list.add(getIntValue(basicDataDto.getGear01Fuel()));
        list.add(getIntValue(basicDataDto.getGear01Duration()));
        list.add(getIntValue(basicDataDto.getGear01Number()));
        list.add(getIntValue(basicDataDto.getGear02Mileage()));
        list.add(getIntValue(basicDataDto.getGear02Fuel()));
        list.add(getIntValue(basicDataDto.getGear02Duration()));
        list.add(getIntValue(basicDataDto.getGear02Number()));
        list.add(getIntValue(basicDataDto.getGear03Mileage()));
        list.add(getIntValue(basicDataDto.getGear03Fuel()));
        list.add(getIntValue(basicDataDto.getGear03Duration()));
        list.add(getIntValue(basicDataDto.getGear03Number()));
        list.add(getIntValue(basicDataDto.getGear04Mileage()));
        list.add(getIntValue(basicDataDto.getGear04Fuel()));
        list.add(getIntValue(basicDataDto.getGear04Duration()));
        list.add(getIntValue(basicDataDto.getGear04Number()));
        list.add(getIntValue(basicDataDto.getGear05Mileage()));
        list.add(getIntValue(basicDataDto.getGear05Fuel()));
        list.add(getIntValue(basicDataDto.getGear05Duration()));
        list.add(getIntValue(basicDataDto.getGear05Number()));
        list.add(getIntValue(basicDataDto.getGear06Mileage()));
        list.add(getIntValue(basicDataDto.getGear06Fuel()));
        list.add(getIntValue(basicDataDto.getGear06Duration()));
        list.add(getIntValue(basicDataDto.getGear06Number()));
        list.add(getIntValue(basicDataDto.getGear07Mileage()));
        list.add(getIntValue(basicDataDto.getGear07Fuel()));
        list.add(getIntValue(basicDataDto.getGear07Duration()));
        list.add(getIntValue(basicDataDto.getGear07Number()));
        list.add(getIntValue(basicDataDto.getGear08Mileage()));
        list.add(getIntValue(basicDataDto.getGear08Fuel()));
        list.add(getIntValue(basicDataDto.getGear08Duration()));
        list.add(getIntValue(basicDataDto.getGear08Number()));
        list.add(getIntValue(basicDataDto.getGear09Mileage()));
        list.add(getIntValue(basicDataDto.getGear09Fuel()));
        list.add(getIntValue(basicDataDto.getGear09Duration()));
        list.add(getIntValue(basicDataDto.getGear09Number()));
        list.add(getIntValue(basicDataDto.getGear10Mileage()));
        list.add(getIntValue(basicDataDto.getGear10Fuel()));
        list.add(getIntValue(basicDataDto.getGear10Duration()));
        list.add(getIntValue(basicDataDto.getGear10Number()));
        list.add(getIntValue(basicDataDto.getGear11Mileage()));
        list.add(getIntValue(basicDataDto.getGear11Fuel()));
        list.add(getIntValue(basicDataDto.getGear11Duration()));
        list.add(getIntValue(basicDataDto.getGear11Number()));
        list.add(getIntValue(basicDataDto.getGear12Mileage()));
        list.add(getIntValue(basicDataDto.getGear12Fuel()));
        list.add(getIntValue(basicDataDto.getGear12Duration()));
        list.add(getIntValue(basicDataDto.getGear12Number()));
        list.add(getIntValue(basicDataDto.getGear13Mileage()));
        list.add(getIntValue(basicDataDto.getGear13Fuel()));
        list.add(getIntValue(basicDataDto.getGear13Duration()));
        list.add(getIntValue(basicDataDto.getGear13Number()));
        list.add(getIntValue(basicDataDto.getGear14Mileage()));
        list.add(getIntValue(basicDataDto.getGear14Fuel()));
        list.add(getIntValue(basicDataDto.getGear14Duration()));
        list.add(getIntValue(basicDataDto.getGear14Number()));
        list.add(getIntValue(basicDataDto.getGear15Mileage()));
        list.add(getIntValue(basicDataDto.getGear15Fuel()));
        list.add(getIntValue(basicDataDto.getGear15Duration()));
        list.add(getIntValue(basicDataDto.getGear15Number()));
        list.add(getIntValue(basicDataDto.getGear16Mileage()));
        list.add(getIntValue(basicDataDto.getGear16Fuel()));
        list.add(getIntValue(basicDataDto.getGear16Duration()));
        list.add(getIntValue(basicDataDto.getGear16Number()));
        list.add(getIntValue(basicDataDto.getGearOtherMileage()));
        list.add(getIntValue(basicDataDto.getGearOtherFuel()));
        list.add(getIntValue(basicDataDto.getGearOtherDuration()));
        list.add(getIntValue(basicDataDto.getGearOtherNumber()));
        list.add(getIntValue(basicDataDto.getRpmRange500Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange500Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange500Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange600Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange600Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange600Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange700Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange700Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange700Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange800Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange800Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange800Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange900Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange900Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange900Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1000Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1000Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1000Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1100Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1100Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1100Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1200Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1200Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1200Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1300Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1300Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1300Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1400Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1400Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1400Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1500Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1500Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1500Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1600Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1600Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1600Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1700Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1700Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1700Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1800Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1800Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1800Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange1900Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange1900Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange1900Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2000Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2000Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2000Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2100Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2100Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2100Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2200Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2200Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2200Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2300Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2300Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2300Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2400Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2400Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2400Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2500Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2500Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2500Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2600Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2600Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2600Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2700Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2700Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2700Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2800Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2800Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2800Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange2900Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange2900Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange2900Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRange3000Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRange3000Duration()));
        list.add(getIntValue(basicDataDto.getRpmRange3000Fuel()));
        list.add(getIntValue(basicDataDto.getRpmRangeOver3000Mileage()));
        list.add(getIntValue(basicDataDto.getRpmRangeOver3000Duration()));
        list.add(getIntValue(basicDataDto.getRpmRangeOver3000Fuel()));
        list.add(getIntValue(basicDataDto.getNoIdleRpmSum()));
        list.add(getIntValue(basicDataDto.getNoIdleRpmCount()));
        list.add(getIntValue(basicDataDto.getRpmSum()));
        list.add(getIntValue(basicDataDto.getRpmCount()));
        list.add(getIntValue(basicDataDto.getMaxRpm()));
        list.add(getIntValue(basicDataDto.getMinRpm()));
        list.add(getIntValue(basicDataDto.getAvgRpm()));
        list.add(getIntValue(basicDataDto.getAvgNoIdleRpm()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp50Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp70Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp80Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp85Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp90Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp95Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp100Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp105Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp110Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp115Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp120Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp125Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp130Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp135Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp140Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp145Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTemp150Duration()));
        list.add(getIntValue(basicDataDto.getWorkWaterTempOver150Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp50Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp70Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp80Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp85Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp90Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp95Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp100Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp105Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp110Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp115Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp120Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp125Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp130Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp135Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp140Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp145Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTemp150Duration()));
        list.add(getIntValue(basicDataDto.getIdleWaterTempOver150Duration()));
        list.add(getIntValue(basicDataDto.getMaxWorkWaterTemp()));
        list.add(getIntValue(basicDataDto.getMinWorkWaterTemp()));
        list.add(getIntValue(basicDataDto.getWorkWaterTempSum()));
        list.add(getIntValue(basicDataDto.getWorkWaterTempCount()));
        list.add(getIntValue(basicDataDto.getAvgWorkWaterTemp()));
        list.add(getIntValue(basicDataDto.getMaxIdleWaterTemp()));
        list.add(getIntValue(basicDataDto.getMinIdleWaterTemp()));
        list.add(getIntValue(basicDataDto.getIdleWaterTempSum()));
        list.add(getIntValue(basicDataDto.getIdleWaterTempCount()));
        list.add(getIntValue(basicDataDto.getAvgIdleWaterTemp()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent0Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent10Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent20Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent30Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent40Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent50Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent60Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent70Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent80Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent90Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent99Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent100Duration()));
        list.add(getIntValue(basicDataDto.getGasOpenPercentCount()));
        list.add(getIntValue(basicDataDto.getGasOpenPercentSum()));
        list.add(getIntValue(basicDataDto.getAvgGasOpenPercent()));
        list.add(getIntValue(basicDataDto.getTorque0Duration()));
        list.add(getIntValue(basicDataDto.getTorque10Duration()));
        list.add(getIntValue(basicDataDto.getTorque20Duration()));
        list.add(getIntValue(basicDataDto.getTorque30Duration()));
        list.add(getIntValue(basicDataDto.getTorque40Duration()));
        list.add(getIntValue(basicDataDto.getTorque50Duration()));
        list.add(getIntValue(basicDataDto.getTorque60Duration()));
        list.add(getIntValue(basicDataDto.getTorque70Duration()));
        list.add(getIntValue(basicDataDto.getTorque80Duration()));
        list.add(getIntValue(basicDataDto.getTorque90Duration()));
        list.add(getIntValue(basicDataDto.getTorque99Duration()));
        list.add(getIntValue(basicDataDto.getTorque100Duration()));
        list.add(getIntValue(basicDataDto.getMaxTorque()));
        list.add(getIntValue(basicDataDto.getMinTorque()));
        list.add(getIntValue(basicDataDto.getTorqueSum()));
        list.add(getIntValue(basicDataDto.getTorqueCount()));
        list.add(getIntValue(basicDataDto.getAvgTorque()));
        list.add(getIntValue(basicDataDto.getIat50Duration()));
        list.add(getIntValue(basicDataDto.getIat70Duration()));
        list.add(getIntValue(basicDataDto.getIat80Duration()));
        list.add(getIntValue(basicDataDto.getIat85Duration()));
        list.add(getIntValue(basicDataDto.getIat90Duration()));
        list.add(getIntValue(basicDataDto.getIat95Duration()));
        list.add(getIntValue(basicDataDto.getIat100Duration()));
        list.add(getIntValue(basicDataDto.getIat105Duration()));
        list.add(getIntValue(basicDataDto.getIat110Duration()));
        list.add(getIntValue(basicDataDto.getIat115Duration()));
        list.add(getIntValue(basicDataDto.getIat120Duration()));
        list.add(getIntValue(basicDataDto.getIat125Duration()));
        list.add(getIntValue(basicDataDto.getIat130Duration()));
        list.add(getIntValue(basicDataDto.getIat135Duration()));
        list.add(getIntValue(basicDataDto.getIat140Duration()));
        list.add(getIntValue(basicDataDto.getIat145Duration()));
        list.add(getIntValue(basicDataDto.getIat150Duration()));
        list.add(getIntValue(basicDataDto.getIatOver150Duration()));
        list.add(getIntValue(basicDataDto.getIatSum()));
        list.add(getIntValue(basicDataDto.getIatCount()));
        list.add(getIntValue(basicDataDto.getMaxIat()));
        list.add(getIntValue(basicDataDto.getMinIat()));
        list.add(getIntValue(basicDataDto.getAvgIat()));
        list.add(getIntValue(basicDataDto.getIp50Duration()));
        list.add(getIntValue(basicDataDto.getIp60Duration()));
        list.add(getIntValue(basicDataDto.getIp70Duration()));
        list.add(getIntValue(basicDataDto.getIp80Duration()));
        list.add(getIntValue(basicDataDto.getIp90Duration()));
        list.add(getIntValue(basicDataDto.getIp100Duration()));
        list.add(getIntValue(basicDataDto.getIp110Duration()));
        list.add(getIntValue(basicDataDto.getIp120Duration()));
        list.add(getIntValue(basicDataDto.getIp130Duration()));
        list.add(getIntValue(basicDataDto.getIp140Duration()));
        list.add(getIntValue(basicDataDto.getIp150Duration()));
        list.add(getIntValue(basicDataDto.getIpOver150Duration()));
        list.add(getIntValue(basicDataDto.getIpSum()));
        list.add(getIntValue(basicDataDto.getIpCount()));
        list.add(getIntValue(basicDataDto.getMaxIp()));
        list.add(getIntValue(basicDataDto.getMinIp()));
        list.add(getIntValue(basicDataDto.getAvgIp()));
        list.add(getIntValue(basicDataDto.getSo90Number()));
        list.add(getIntValue(basicDataDto.getSo90Duration()));
        list.add(getIntValue(basicDataDto.getSo90Mileage()));
        list.add(getIntValue(basicDataDto.getSo90100kmTimes()));
        list.add(getIntValue(basicDataDto.getSo90DurationProportion()));
        list.add(getIntValue(basicDataDto.getSo90MileageProportion()));
        list.add(getIntValue(basicDataDto.getSo120Number()));
        list.add(getIntValue(basicDataDto.getSo120Duration()));
        list.add(getIntValue(basicDataDto.getSo120Mileage()));
        list.add(getIntValue(basicDataDto.getSo120100kmTimes()));
        list.add(getIntValue(basicDataDto.getSo120DurationProportion()));
        list.add(getIntValue(basicDataDto.getSo120MileageProportion()));
        list.add(getIntValue(basicDataDto.getSrNumber()));
        list.add(getIntValue(basicDataDto.getSrDuration()));
        list.add(getIntValue(basicDataDto.getSrMileage()));
        list.add(getIntValue(basicDataDto.getSrFuel()));
        list.add(getIntValue(basicDataDto.getSr100kmTimes()));
        list.add(getIntValue(basicDataDto.getSrDurationProportion()));
        list.add(getIntValue(basicDataDto.getSrMileageProportion()));
        list.add(getIntValue(basicDataDto.getLrogNumber()));
        list.add(getIntValue(basicDataDto.getLrogDuration()));
        list.add(getIntValue(basicDataDto.getLrogMileage()));
        list.add(getIntValue(basicDataDto.getLrogFuel()));
        list.add(getIntValue(basicDataDto.getLrog100kmTimes()));
        list.add(getIntValue(basicDataDto.getLrogDurationProportion()));
        list.add(getIntValue(basicDataDto.getLrogMileageProportion()));
        list.add(getIntValue(basicDataDto.getHsbNumber()));
        list.add(getIntValue(basicDataDto.getHsbDuration()));
        list.add(getIntValue(basicDataDto.getHsbMileage()));
        list.add(getIntValue(basicDataDto.getHsb100kmTimes()));
        list.add(getIntValue(basicDataDto.getHsbDurationProportion()));
        list.add(getIntValue(basicDataDto.getHsbMileageProportion()));
        list.add(getIntValue(basicDataDto.getCsbNumber()));
        list.add(getIntValue(basicDataDto.getCsbDuration()));
        list.add(getIntValue(basicDataDto.getCsbMileage()));
        list.add(getIntValue(basicDataDto.getCsb100kmTimes()));
        list.add(getIntValue(basicDataDto.getCsbDurationProportion()));
        list.add(getIntValue(basicDataDto.getCsbMileageProportion()));
        list.add(getIntValue(basicDataDto.getClutchNumber()));
        list.add(getIntValue(basicDataDto.getClutchDuration()));
        list.add(getIntValue(basicDataDto.getClutchMileage()));
        list.add(getIntValue(basicDataDto.getClutch100kmTimes()));
        list.add(getIntValue(basicDataDto.getClutchDurationProportion()));
        list.add(getIntValue(basicDataDto.getClutchMileageProportion()));
        list.add(getIntValue(basicDataDto.getNgCoastDuration()));
        list.add(getIntValue(basicDataDto.getNgCoastFuel()));
        list.add(getIntValue(basicDataDto.getNgCoastMileage()));
        list.add(getIntValue(basicDataDto.getNgCoastNumber()));
        list.add(getIntValue(basicDataDto.getNg100kmTimes()));
        list.add(getIntValue(basicDataDto.getNgDurationProportion()));
        list.add(getIntValue(basicDataDto.getNgMileageProportion()));
        list.add(getIntValue(basicDataDto.getIdleFuel()));
        list.add(getIntValue(basicDataDto.getIdleDuration()));
        list.add(getIntValue(basicDataDto.getIdleNumber()));
        list.add(getIntValue(basicDataDto.getIdle100kmTimes()));
        list.add(getIntValue(basicDataDto.getIdleDurationProportion()));
        list.add(getIntValue(basicDataDto.getFoutTimes()));
        list.add(getIntValue(basicDataDto.getFoutDuration()));
        list.add(getIntValue(basicDataDto.getFout100kmTimes()));
        list.add(getIntValue(basicDataDto.getFoutDurationProportion()));




        Map<String, AltitudeDto> altitudeDtoMap = basicDataDto.getAltitudeDtoMap();
        if (altitudeDtoMap != null) {
        Row altitudeInfoRow = getAslRow(altitudeDtoMap);
        list.add(altitudeInfoRow);
        } else {
            list.add(null);
        }

        VehicleHourInfoDto vehicleHourInfoDto = basicDataDto.getVehicleHourInfoDto();

        if (vehicleHourInfoDto != null) {
            Map<String, VehicleHourBean> vehicleHourBeanMap = vehicleHourInfoDto.getVehicleHourBeanMap();
            Row vehicleHourInfoRow = getHourRow(vehicleHourBeanMap);
            list.add(vehicleHourInfoRow);
        } else {
            list.add(null);
        }

        list.add(basicDataDto.getUpdateTime());
        //add row start
        list.add(getIntValue(basicDataDto.getSharpTurningMil()));
        list.add(getIntValue(basicDataDto.getSo90Fuel()));
        list.add(getIntValue(basicDataDto.getSo120Fuel()));
        list.add(getIntValue(basicDataDto.getFatigueDrivingDuration()));


        //新增按行程累加的吨/公里字段的值
        String tonKM = null;
        try {
            tonKM = JsonUtil.toJson(basicDataDto.getTonKMDtos());
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        list.add(tonKM);

        //新增按行程累加的经过城市详细信息字段的值
        String crossCityInfo = null;
        try {
            crossCityInfo = JsonUtil.toJson(basicDataDto.getCrossCitiesInfos());
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        list.add(crossCityInfo);

        //新增不同载重类型的里程和油耗信息字段的值
        list.add(getWloadInfo(basicDataDto.getWLoadInfoDto()));


        list.add(getIntValue(basicDataDto.getFuel100km()));
        list.add(getIntValue(basicDataDto.getAvgSpeedNoidle()));
        list.add(getIntValue(basicDataDto.getEcoProportion()));
        list.add(getIntValue(basicDataDto.getTripMileageTotal()));
        list.add(getIntValue(basicDataDto.getBrakeTimes()));
        list.add(getIntValue(basicDataDto.getSharpUpSpeed1Mileage()));
        list.add(getIntValue(basicDataDto.getSharpUpSpeed1Fuel()));
        list.add(getIntValue(basicDataDto.getSharpUpSpeed1Duration()));
        list.add(getIntValue(basicDataDto.getSharpUpSpeed1Number()));
        list.add(getIntValue(basicDataDto.getSharpDownSpeed1Mileage()));
        list.add(getIntValue(basicDataDto.getSharpDownSpeed1Fuel()));
        list.add(getIntValue(basicDataDto.getSharpDownSpeed1Duration()));
        list.add(getIntValue(basicDataDto.getSharpDownSpeed1Number()));
        list.add(getIntValue(basicDataDto.getSharpTurning1Number()));
        list.add(getIntValue(basicDataDto.getLongIdleFuel()));
        list.add(getIntValue(basicDataDto.getLongIdleDuration()));
        list.add(getIntValue(basicDataDto.getLongIdleNumber()));
        list.add(getIntValue(basicDataDto.getColdRunningMileage()));
        list.add(getIntValue(basicDataDto.getColdRunningFuel()));
        list.add(getIntValue(basicDataDto.getColdRunningDuration()));
        list.add(getIntValue(basicDataDto.getColdRunningNumber()));
        list.add(getIntValue(basicDataDto.getNightRunningMileage()));
        list.add(getIntValue(basicDataDto.getNightRunningFuel()));
        list.add(getIntValue(basicDataDto.getNightRunningDuration()));
        list.add(getIntValue(basicDataDto.getNightRunningNumber()));
        list.add(getIntValue(basicDataDto.getHighRotationMileage()));
        list.add(getIntValue(basicDataDto.getHighRotationFuel()));
        list.add(getIntValue(basicDataDto.getHighRotationDuration()));
        list.add(getIntValue(basicDataDto.getHighRotationNumber()));
        list.add(getIntValue(basicDataDto.getLargeGasMileage()));
        list.add(getIntValue(basicDataDto.getLargeGasFuel()));
        list.add(getIntValue(basicDataDto.getLargeGasDuration()));
        list.add(getIntValue(basicDataDto.getLargeGasNumber()));
        list.add(getIntValue(basicDataDto.getFullGasMileage()));
        list.add(getIntValue(basicDataDto.getFullGasFuel()));
        list.add(getIntValue(basicDataDto.getFullGasDuration()));
        list.add(getIntValue(basicDataDto.getFullGasNumber()));
        list.add(getIntValue(basicDataDto.getFastSpeedMileage()));
        list.add(getIntValue(basicDataDto.getFastSpeedFuel()));
        list.add(getIntValue(basicDataDto.getFastSpeedDuration()));
        list.add(getIntValue(basicDataDto.getFastSpeedNumber()));
        list.add(getIntValue(basicDataDto.getNeutralGearCoast1Mileage()));
        list.add(getIntValue(basicDataDto.getNeutralGearCoast1Fuel()));
        list.add(getIntValue(basicDataDto.getNeutralGearCoast1Duration()));
        list.add(getIntValue(basicDataDto.getNeutralGearCoast1Number()));
        list.add(getIntValue(basicDataDto.getFlameoutCoastMileage()));
        list.add(getIntValue(basicDataDto.getFlameoutCoastFuel()));
        list.add(getIntValue(basicDataDto.getFlameoutCoastDuration()));
        list.add(getIntValue(basicDataDto.getFlameoutCoastNumber()));

        //新增按行程累加载重字段的值
        String loadInfoStr = null;
        try {
            loadInfoStr = JsonUtil.toJson(basicDataDto.getLoadInfos());
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        list.add(loadInfoStr);


        //新增按行程累加打分字段的值
        String scoreInfoStr = null;
        try {
            scoreInfoStr = JsonUtil.toJson(basicDataDto.getScoreInfos());
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        list.add(scoreInfoStr);

        // 新增根据仪表速度=0的怠速油耗、时长、次数
        list.add(getIntValue(basicDataDto.getIdleFuelInsSpeed()));
        list.add(getIntValue(basicDataDto.getIdleDurationInsSpeed()));
        list.add(getIntValue(basicDataDto.getIdleNumberInsSpeed()));

        list.add(getIntValue(basicDataDto.getGasOpenPercent0Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent10Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent20Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent30Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent40Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent50Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent60Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent70Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent80Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent90Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent99Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent100Mileage()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent0Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent10Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent20Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent30Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent40Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent50Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent60Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent70Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent80Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent90Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent99Fuel()));
        list.add(getIntValue(basicDataDto.getGasOpenPercent100Fuel()));
        list.add(getIntValue(basicDataDto.getTorque0Mileage()));
        list.add(getIntValue(basicDataDto.getTorque10Mileage()));
        list.add(getIntValue(basicDataDto.getTorque20Mileage()));
        list.add(getIntValue(basicDataDto.getTorque30Mileage()));
        list.add(getIntValue(basicDataDto.getTorque40Mileage()));
        list.add(getIntValue(basicDataDto.getTorque50Mileage()));
        list.add(getIntValue(basicDataDto.getTorque60Mileage()));
        list.add(getIntValue(basicDataDto.getTorque70Mileage()));
        list.add(getIntValue(basicDataDto.getTorque80Mileage()));
        list.add(getIntValue(basicDataDto.getTorque90Mileage()));
        list.add(getIntValue(basicDataDto.getTorque99Mileage()));
        list.add(getIntValue(basicDataDto.getTorque100Mileage()));
        list.add(getIntValue(basicDataDto.getTorque0Fuel()));
        list.add(getIntValue(basicDataDto.getTorque10Fuel()));
        list.add(getIntValue(basicDataDto.getTorque20Fuel()));
        list.add(getIntValue(basicDataDto.getTorque30Fuel()));
        list.add(getIntValue(basicDataDto.getTorque40Fuel()));
        list.add(getIntValue(basicDataDto.getTorque50Fuel()));
        list.add(getIntValue(basicDataDto.getTorque60Fuel()));
        list.add(getIntValue(basicDataDto.getTorque70Fuel()));
        list.add(getIntValue(basicDataDto.getTorque80Fuel()));
        list.add(getIntValue(basicDataDto.getTorque90Fuel()));
        list.add(getIntValue(basicDataDto.getTorque99Fuel()));
        list.add(getIntValue(basicDataDto.getTorque100Fuel()));
        list.add(getIntValue(basicDataDto.getTripUrea()));
        list.add(getIntValue(basicDataDto.getUrea100km()));
        list.add(getIntValue(basicDataDto.getUreaFuelRatio()));






        return new GenericRowWithSchema(list.toArray(), schema);
    }

    private static Row getWloadInfo(WLoadInfoDto wLoadInfoDto) {
        if (null == wLoadInfoDto || null == wLoadInfoDto.getWLoadInfoMap()) {
            return null;
        }

        List<Row> rowList = new ArrayList<>();
        Map<String, WLoadInfoDto.WLoadInfo> wLoadInfoMap = wLoadInfoDto.getWLoadInfoMap();
        for (String key : WLoadInfoDto.typeKeys) {
            WLoadInfoDto.WLoadInfo wLoadInfo = wLoadInfoMap.get(key);
            if (null != wLoadInfo) {
                rowList.add(RowFactory.create(wLoadInfo.getMileage(), wLoadInfo.getFuel()));
            } else {
                rowList.add(null);
            }
        }

        return RowFactory.create(rowList.toArray());
    }

    private static Row getHourRow(Map<String, VehicleHourBean> vehicleHourBeanMap) {
        if (vehicleHourBeanMap == null || vehicleHourBeanMap.isEmpty()) {
            return null;
        }
        List<Row> rowList = new ArrayList<>();
        for (String hourKey : VehicleHourInfoDto.hourKeys) {
            VehicleHourBean vehicleHourBean = vehicleHourBeanMap.get(hourKey);
            if (vehicleHourBean != null) {
                Row hourRow = RowFactory.create(
                        vehicleHourBean.getState(),
                        vehicleHourBean.getTime(),
                        vehicleHourBean.getMileage(),
                        vehicleHourBean.getFuel());
                rowList.add(hourRow);
            } else {
                rowList.add(null);
            }
        }

        return RowFactory.create(rowList.toArray());
    }

    private static Row getAslRow(Map<String, AltitudeDto> altitudeDtoMap) {
        if (altitudeDtoMap == null || altitudeDtoMap.isEmpty()) {
            return null;
        }
        List<Row> rowList = new ArrayList<>();
        for (String hourKey : AltitudeDto.aslKeys) {
            AltitudeDto altitudeDto = altitudeDtoMap.get(hourKey);
            if (altitudeDto != null) {
                Row hourRow = RowFactory.create(
                        altitudeDto.getTime(),
                        altitudeDto.getMileage(),
                        altitudeDto.getFuel());
                rowList.add(hourRow);
            } else {
                rowList.add(null);
            }
        }

        return RowFactory.create(rowList.toArray());
    }
}
